import java.util.HashMap;
import java.util.Map;

public class 表现良好的最长时间段 {


    public int longestWPI(int[] hours) {
        Map<Integer,Integer> map = new HashMap<>(); // key 为前缀和, value 为出现最早的下标
        int n = hours.length; // 数组长度
        int ans = 0; // 返回值
        map.put(0,-1); // 前缀和为 0 时, 下标为 -1, 可以少处理边界条件
        for (int i = 0,sum = 0; i < n; i++) {
            sum += hours[i] > 8 ? -1 : 1; // 劳累设为 -1, 不劳累设为 1
            if (sum < 0) { // 如果遍历到这个位置满足 < 0, 肯定是没有更大的了
                ans = i + 1;
            } else {
                // 如果此时 sum > 0, 查找 sum + 1 是否存在
                if (map.containsKey(sum + 1)) { // 存在即更新
                    ans = Math.max(ans,i - map.get(sum + 1));
                }
            }
            // 检查一下当前前缀和是否存在, 存储最早出现的下标
            if (!map.containsKey(sum)) {
                map.put(sum,i);
            }
        }
        return ans;
    }
}
